package com.qkl.user.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qkl.user.entity.MatrixRelation;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

public interface MatrixRelationMapper extends BaseMapper<MatrixRelation> {
    MatrixRelation selectByUserId(Long userId);
    int updateByIdCustom(MatrixRelation matrixRelation); // 新增自定义方法
//    @Select("SELECT * FROM matrix_relation WHERE parent_id = #{parentId} AND position = #{position}")
//    String  selectUserLevelByUserId(@Param("parentId") Long parentId, @Param("position") int position);

    /**
     * 根据用户ID查询等级（需关联user表，实际SQL按你的表结构编写）
     * @param userId 用户ID
     * @return 等级名称（如“三星上尉”）
     */
    String selectUserLevelByUserId(@Param("userId") Long userId);




    /**
     * 批量查询用户等级（减少IO，一次查多个）
     * @param userIds 用户ID列表
     * @return key=userId，value=等级名称
     */
    Map<Long, String> selectUserLevelsBatch(@Param("userIds") List<Long> userIds);


    /**
     * 批量查询目标path下16层内的所有子节点path（利用前缀索引）
     * @param targetPath 目标用户的path（如"1001"）
     * @param maxSegments 最大段数（目标段数+15）
     * @return 所有符合条件的子节点path列表
     */
    List<String> selectChildPathsByPrefixAndMaxSegments(
            @Param("targetPath") String targetPath,
            @Param("maxSegments") int maxSegments
    );
    /**
     * 批量查询目标path下16层内的所有子节点的ID和path
     * @param targetPath 目标用户的path
     * @param maxSegments 最大段数
     * @return 返回一个Map列表，包含 "userId" 和 "path" 两个键
     */
    List<Map<String, Object>> selectChildUserIdsAndPathsByPrefixAndMaxSegments(
            @Param("targetPath") String targetPath,
            @Param("maxSegments") int maxSegments
    );

    /**
     * 批量查询多个父节点的直推子节点数
     * @param parentIds 父节点ID列表
     * @return 一个Map，key为parentId，value为子节点数量
     */
    Map<Long, Integer> batchCountDirectChildrenByParentIds(List<Long> parentIds);

    /**
     * 查询用户B是否在用户A的节点下面（含直推和滑落）
     * @param targetUserId 用户A的ID（上级）
     * @param childUserId 用户B的ID（下级）
     * @return 1=是，0=否（存在返回1，不存在返回0）
     */
    int isChildNode(@Param("targetUserId") Long targetUserId, @Param("childUserId") Long childUserId);

}
